﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Xna.Framework;

namespace GameLayer
{
    public class Utility
    {
        //Tham khaỏ tại http://create.msdn.com/en-US/education/catalog/tutorial/collision_2d_perpixel
        /// <summary>
        /// Xác định sự chồng chéo của các pixel không trong suốt của 2 sprite
        /// </summary>
        /// <param name="rectangleA">Vùng giới hạn của sprite thứ nhất</param>
        /// <param name="dataA">pixel data của sprite thứ nhất</param>
        /// <param name="rectangleB">Vùng giới hạn của sprite thứ hai</param>
        /// <param name="dataB">pixel data của sprite thứ hai</param>
        /// <returns>True nếu có bất cứ sự chồng chéo pixel của 2 pixel không trong suốt của 2 sprite, ngược lại return false</returns>
        public static bool IntersectPixels(Rectangle rectangleA, Color[] dataA,
                                   Rectangle rectangleB, Color[] dataB)
        {
            // Tìm vùng va chạm của 2 rectangle
            int top = Math.Max(rectangleA.Top, rectangleB.Top);
            int bottom = Math.Min(rectangleA.Bottom, rectangleB.Bottom);
            int left = Math.Max(rectangleA.Left, rectangleB.Left);
            int right = Math.Min(rectangleA.Right, rectangleB.Right);

            // Kiểm tra mỗi điểm trong vùng va chạm
            for (int y = top; y < bottom; y++)
            {
                for (int x = left; x < right; x++)
                {
                    // Lấy giá trị màu của từng sprite tại điểm đó
                    Color colorA = dataA[(x - rectangleA.Left) +
                                         (y - rectangleA.Top) * rectangleA.Width];
                    Color colorB = dataB[(x - rectangleB.Left) +
                                         (y - rectangleB.Top) * rectangleB.Width];

                    // Nếu 2 pixel đó không trong suốt hoàn toàn
                    if (colorA.A != 0 && colorB.A != 0)
                    {
                        // Điều đó nghĩa là có sự chồng chéo pixel
                        return true;
                    }
                }
            }

            // Không có sự chồng chéo tìm thấy
            return false;
        }
    }
}
